<?php


namespace app\api\service;

use Endroid\QrCode\QrCode;
use think\App;
use think\Env;
use think\Exception;
use Yansongda\Pay\Pay;

/**
 * 公共服务类
 * Class CommonService
 * @package app\api\service
 */
class CommonService
{
    //获取文章内容中的文件链接地址,将不是本项目的文件存到本项目中,并更新对应的文件地址
    public function contentFiles($html)
    {
        // 使用正则表达式匹配图片链接并获取src属性值
        preg_match_all('/<img\s+src=[\'"]([^\'"]+)[\'"].*?>/i', $html, $matches);
        $srcValues = $matches[1] ?? [];
        // 打印获取到的src属性值
        $baseUrl = request()->domain();
        //获取富文本中src的值
        foreach ($srcValues as $v) {
            //判断当前文件域名是否为本项目的
            if (!(strpos($v, $baseUrl) === 0)) {
                //不是当前项目的域名开头
                $downloadFile = $this->downloadFile($v);
                if ($downloadFile['new_url'] != $downloadFile['old_url']){
                    //开始替换文章内容中的url
                    $html = str_replace($v, $downloadFile['new_url'], $html);
                }
            }
        }
        return $html;
    }

    /**
     * 下载文件
     * @param $url 带协议名的绝对地址,例如 https://pics5.baidu.com/feed/aaa.jpeg
     */
    public function downloadFile($url)
    {
        // 使用正则表达式匹配文件名部分
        preg_match('/[^\/?]+\.(jpe?g|png|gif)/i', $url, $matches);
        // 获取匹配到的文件后缀名
        $extension = $matches[1];
        // 下载文件到 public/upload 目录
//        dd($filename);
        $savePath = 'uploads/' . date('Ymd') . '/'; // 文件保存路径
        $file_name = time() . rand(1111, 9999) . '.' . $extension;
        $path = $savePath . $file_name; // 文件保存路径
        // 下载文件
        $fileContent = file_get_contents($url);

        $res = [
            'new_url' => $url,
            'old_url' => $url
        ];
        // 将文件保存到指定目录
        if ($fileContent !== false) {
            if (!is_dir($savePath)) {
                mkdir($savePath, 0755, true);
            }
            //文件下载并保存
            file_put_contents($path, $fileContent);
            $res['new_url'] = localurl($path);
        }
        return $res;
    }

}